package com.yyc.core;

import java.util.List;

import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.exceptions.TooManyResultsException;

import tk.mybatis.mapper.entity.Condition;

/**
 * Service 层 基础接口，其他Service 接口 请继承该接口
 */
public interface Service<T> {
	void save(T model);// 持久化

	int saveList(List<T> models);// 批量持久化

	void deleteById(Integer id);// 通过主鍵刪除

	void deleteByIds(String ids);// 批量刪除 eg：ids -> “1,2,3,4”

	int update(T model);// 更新

	T findById(Integer id);// 通过ID查找

	T findBy(String fieldName, Object value) throws TooManyResultsException; // 通过Model中某个成员变量名称（非数据表中column的名称）查找,value需符合unique约束

	List<T> findByIds(String ids);// 通过多个ID查找//eg：ids -> “1,2,3,4”

	/**
	 * 根据条件查找
	 * 
	 * @param condition 条件
	 * @return 结果集
	 */
	List<T> findByCondition(Condition condition);

	List<T> findAll();// 获取所有

	/**
	 * 根据Condition条件更新实体record包含的不是null的属性值
	 * 
	 * @param record
	 *            实体类
	 * @param condition
	 *            条件
	 * @return 数量
	 */
	int updateByConditionSelective(@Param("record") T record, Object condition);

	/**
	 * 根据Condition条件更新实体record包含的全部属性，null值会被更新
	 * 
	 * @param record
	 *            实体类
	 * @param condition
	 *            条件
	 * @return 数量
	 */
	int updateByCondition(T record, Object condition);

	/**
	 * 根据Condition条件删除数据
	 * 
	 * @param condition
	 *            条件
	 * @return 删除数
	 */
	int deleteByCondition(Object condition);

	/**
	 * 根据Condition条件进行查询总数
	 * 
	 * @param condition
	 *            条件
	 * @return 总数
	 */
	int selectCountByCondition(Object condition);
}
